cilium系列之一:安装并配置cilium | 您所在的位置:网站首页 › k8s cilium cidr设置 › cilium系列之一:安装并配置cilium |
DockOne微信分享(二五四):阿里云如何构建高性能云原生容器网络? 这篇文章挺厉害的,介绍了cilium在service和networkpolicy上的作用 cilium可以在内核转发和过滤数据包,可以解决现有的kube-proxy性能问题 里面介绍到 Kubernetes Service 性能和扩展性问题 默认的 Kubernetes 的 Service 实现 kube-proxy,它是使用了 iptables 去配置 Service IP 和负载均衡: 如上图所示: 负载均衡过程的 iptables 链路长,导致网络延时显著增加,就算是 IPVS 模式也是绕不开 iptables 的调用; 扩展性差。iptables 规则同步是全量刷的,Service 和 Pod 数量多了,一次规则同步都得接近 1s;Service 和 Pod 数量多了之后,数据链路性能大幅降低。 NetworkPolicy 性能和扩展性问题 NetworkPolicy 是 Kubernetes 控制 Pod 和 Pod 间是否允许通信的规则。目前主流的 NetworkPolicy 实现基于 iptables 实现,同样有 iptables 的扩展性问题: iptables 线性匹配,性能不高, Scale 能力差 iptables 线性更新,更新速度慢 性能对比 通过 eBPF 对链路的简化,性能有明显提升,相对 iptables 提升 32%,相对 IPVS 提升 62%; 通过编程的 eBPF 的形式,让 Service 数量增加到 5000 时也几乎没有性能损耗,而 iptables 在 Service 增加到 5000 时性能损失了 61%。 这些图都很直观,cilium的突出之处就是,ebpf能让service维持高性能不衰减,也能避免iptables的链路损失。 这篇文章思路其实很好,就是网络层用ipvlan走underlay,networkpolicy和service转发用cilium走ebpf过滤和转发网络包。 调整时间 yum install -y chrony; timedatectl set-ntp true; timedatectl set-timezone Asia/Shanghai; systemctl restart chronyd; 安装或升级containerd 下载最新版的nerdctl,里面有containerd和runc二进制 nerdctl官方github地址https://github.com/containerd/nerdctl/releases#下载到/root目录下,nerdctl github地址为https://github.com/containerd/nerdctl/releases tar zxvf nerdctl-full-0.20.0-linux-amd64.tar.gz; #复制二进制文件、cni文件与systemd文件 \cp -f bin/* /usr/local/bin/;\cp -f lib/systemd/system/* /etc/systemd/system;mkdir -p /opt/cni/bin;\cp -f libexec/cni/* /opt/cni/bin; #修改buildkitd工作目录与estargz sed -i "s#ExecStart=/usr/local/bin/buildkitd\(.*\)#ExecStart=/usr/local/bin/buildkitd --root /opt/buildkit --containerd-worker-snapshotter=stargz#g" /etc/systemd/system/buildkit.service #修改stargz-snapshotter工作目录 sed -i "s#ExecStart=\(.*\)#ExecStart=/usr/local/bin/containerd-stargz-grpc --root /opt/containerd-stargz-grpc --log-level=debug --config=/etc/containerd-stargz-grpc/config.toml#g" /etc/systemd/system/stargz-snapshotter.service #生成默认配置 mkdir /etc/containerd;containerd config default > /etc/containerd/config.toml; #修改crictl配置文件,获得containerd的sock信息,否则从yum源安装的crictl无法读取镜像或者清理镜像之类的操作 echo 'runtime-endpoint: unix:///run/containerd/containerd.sock' > /etc/crictl.yaml; #替换snapshotter与使用 systemd cgroup 驱动程序 sed -i -e 's#registry.k8s.io#registry.aliyuncs.com/google_containers#g' -e 's#registry-1.docker.io#3i61yr6w.mirror.aliyuncs.com#g' -e "s#SystemdCgroup\(.*\)#SystemdCgroup\ =\ true#g" /etc/containerd/config.toml #下面几段来自kubernetes官网https://kubernetes.io/zh/docs/setup/production-environment/container-runtimes/#containerd cat |
CopyRight 2018-2019 实验室设备网 版权所有 |